home *** CD-ROM | disk | FTP | other *** search
- // finds prime-numbers, conv from a C-source
- // change user settings
-
- decsub showtime ();
-
- int search; int showtime;
- lint limit; lint sqrlimit; lint i; lint j; int max; lint max2;
-
- // for formatted output:
-
- int maxnum; int startnum; int proutp; int linecount; int maxline;
- lint prnum; int prspace;
-
-
- // USER SETTINGS --------------------------------------------------------
-
- #arraycheck_off
-
- maxnum = 10; numbers per line
-
- proutp = 0; for printer-formatted output set to 1
- maxline = 69; max lines per page
-
- showtime = 0; print time info (0 / 1)
-
- sqrlimit = 310; number limit
-
- // ----------------------------------------------------------------------
-
- limit = sqrlimit * sqrlimit;
-
- max2 = limit -- 1;
-
- _vmuse = 1; _vmbsize = limit * _intsize; _vmcachesize = 30000;
-
- int primbuf[limit];
-
- // initialize array by zero
-
- init primbuf 0;
-
- fopen 1, "primes.txt", "w";
-
- if showtime = 1;
- fwrite 1, "start-time ";
- call showtime ();
- endif;
-
- print /c;
- locate 1 3; print "searching primes...";
-
- search = 0; i = 2;
- while search = 0;
- max = primbuf[i];
- if max = 1;
- inc i;
- endif;
-
- j = i + i;
-
- while j <= max2;
- primbuf[j] = 1;
- j = j + i;
- wend;
-
- search = i >= sqrlimit;
- inc i;
-
- locate 3 3;
- print "done: ", i, " of ", sqrlimit, /n;
- wend;
-
- print /c;
- locate 1 3; print "writing primes to 'primes.txt'", /n2;
-
- i = 2; startnum = 0; linecount = 0; prnum = 10; prspace = 6;
-
- while i <= max2;
- max = primbuf[i];
- if max = 0;
- inc startnum;
- if startnum = 1;
- if proutp;
- fwrite 1, /s4; print left margin
- endif;
- endif;
-
- if i > prnum;
- if i < 100000L;
- prnum = prnum * 10;
- dec prspace;
- endif;
- endif;
- fwrite 1, /s prspace;
-
- fwrite 1, i;
-
- if startnum = maxnum;
- fwrite 1, /n;
-
- if proutp;
- inc linecount;
-
- if linecount = maxline;
- fwrite 1, /n3;
- linecount = 0;
- endif;
- endif;
-
- startnum = 0;
- endif;
- endif;
-
- inc i;
- wend;
- fwrite 1, /n2;
-
- if showtime = 1;
- fwrite 1, "stop-time ";
- call showtime ();
- endif;
- fclose 1;
- exit;
-
- sub showtime ();
- int n;
-
- n = 0;
- time;
- _year = _year + 1900;
-
- if _day < 10; fwrite 1, n; endif; fwrite 1, _day, "-";
- if _month < 10; fwrite 1, n; endif; fwrite 1, _month, "-";
- fwrite 1, _year, /s2;
-
- if _hour < 10; fwrite 1, n; endif; fwrite 1, _hour, ":";
- if _min < 10; fwrite 1, n; endif; fwrite 1, _min, ":";
- if _sec < 10; fwrite 1, n; endif; fwrite 1, _sec, /n2;
- endsub;
-